//[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
/**
 *
 *@file		res_manager.h
 *@brief	リソースID管理マネージャー
 *@author	tomoya takahashi
 *@data		2005.08.29
 *
 */
//]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
#ifndef __RES_MANAGER_H__
#define __RES_MANAGER_H__

#undef GLOBAL
#ifdef	__RES_MANAGER_H_GLOBAL
#define	GLOBAL	/* */
#else
#define	GLOBAL	extern
#endif

//-----------------------------------------------------------------------------
/**
 *					定数宣言
*/
//-----------------------------------------------------------------------------
#define RES_MANAGER_ID_NONE	(0xffffffff)	// IDなし

//-----------------------------------------------------------------------------
/**
 *					構造体宣言
*/
//-----------------------------------------------------------------------------
//-------------------------------------
//
//	リソースヘッダーポインタ
//
//	登録データをまとめたデータです
//
//=====================================
typedef struct _RES_HEADER* RES_HEADER_PTR;

//---------------------------
//
//	リソース管理マネージャー
//	管理データポインタ
//
//===========================
typedef struct _RES_MANAGER* RES_MANAGER_PTR;

//---------------------------
//
//	リソース管理データポインタ
//	読み込んだ１つのリソースデータを
//	管理しているポインタ
//
//===========================
typedef struct _RES_OBJ* RES_OBJ_PTR;

//-----------------------------------------------------------------------------
/**
 *					プロトタイプ宣言
*/
//-----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/**
 *
 *@brief	リソース管理マネージャー実態部作成
 *
 *@param	num		データ管理テーブル数
 *
 *@return	RES_MANAGER_PTR		管理データポインタ
 *
 * ●管理テーブル領域の確保
 * ●管理テーブル領域の初期化
 *
 */
//-----------------------------------------------------------------------------
GLOBAL RES_MANAGER_PTR RESM_Init(int num, int heap);

//----------------------------------------------------------------------------
/**
 *
 *@brief	リソース管理データ破棄
 *
 *@param	resm	リソース管理データ
 *
 *@return	none
 *
 *	●読み込んだリソースを破棄
 *	●管理テーブル領域を破棄
 */
//-----------------------------------------------------------------------------
GLOBAL void RESM_Delete(RES_MANAGER_PTR resm);

//----------------------------------------------------------------------------
/**
 *
 *@brief	残り登録可能数を取得
 *
 *@param	resm	取得するリソース管理データ
 *
 *@return	int		残り登録可能数
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL int RESM_GetRest(RES_MANAGER_PTR resm);

//----------------------------------------------------------------------------
/**
 *
 *@brief	IDが重複しないかを取得
 *
 *@param	resm	取得するリソース管理データ
 *@param	id		チェックするID
 *
 *@retval	TRUE	重複しない
 *@retval	FALSE	重複する
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL BOOL RESM_CheckID(RES_MANAGER_PTR resm, int id);

//----------------------------------------------------------------------------
/**
 *
 *@brief	リソースの登録
 *
 *@param	resm	登録するリソース管理データポインタ
 *@param	res		リソース
 *@param	id		登録ID	（＊重複注意）
 *
 *@retval	RES_OBJ_PTR	登録成功
 *@retval	NULL		登録失敗	登録テーブルが満杯
 *
 * ●パスのリソースを読み込んで、管理データに設定
 *
 */
//-----------------------------------------------------------------------------
GLOBAL RES_OBJ_PTR RESM_AddResNormal(RES_MANAGER_PTR resm, void* res, int id);

//----------------------------------------------------------------------------
/**
 *
 *@brief	リソースの登録
 *
 *@param	resm	登録するリソース管理データポインタ
 *@param	p_path	リソースのパス
 *@param	id		登録ID	（＊重複注意）
 *@param	heap	リソース読み込みに使用するヒープ
 CONST_*
 *@retval	RES_OBJ_PTR	登録成功
 *@retval	NULL		登録失敗	登録テーブルが満杯orパスが正しくない
 *
 * ●パスのリソースを読み込んで、管理データに設定
 *
 */
//-----------------------------------------------------------------------------
GLOBAL RES_OBJ_PTR RESM_AddRes(RES_MANAGER_PTR resm, const char* p_path, int id, int heap);

//----------------------------------------------------------------------------
/**
 *
 *@brief	ヘッダーを使用したリソースの登録（単発）
 *
 *@param	resm	登録するリソース管理データポインタ
 *@param	header	リソースヘッダーポインタ
 *@param	no		登録するナンバー
 *@param	heap	リソース読み込みに使用するヒープ
 *
 *@retval	RES_OBJ_PTR	登録成功
 *
 * ●パスのリソースを読み込んで、管理データに設定
 *
 */
//-----------------------------------------------------------------------------
GLOBAL RES_OBJ_PTR RESM_AddResHd(RES_MANAGER_PTR resm, const RES_HEADER_PTR header, int no, int heap);

//----------------------------------------------------------------------------
/**
 *
 *@brief	ヘッダーを使用したリソースの登録（複数）
 *
 *@param	resm	登録するリソース管理データポインタ
 *@param	header	リソースヘッダーポインタ
 *@param	heap	リソース読み込みに使用するヒープ
 *
 *@return	none
 *
 * ●パスのリソースを読み込んで、管理データに設定
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void RESM_AddResHds(RES_MANAGER_PTR resm, const RES_HEADER_PTR header, int heap);

//----------------------------------------------------------------------------
/**
 *
 *@brief	ヘッダーを使用したリソースの登録（複数）
 *			ヘッダーの開始要素、終了要素を指定
 *
 *@param	resm	登録するリソース管理データポインタ
 *@param	header	リソースヘッダーポインタ
 *@param	start	開始要素数
 *@param	num		登録要素数
 *@param	heap	リソース読み込みに使用するヒープ
 *
 *@return	noen
 *
 * ●パスのリソースを読み込んで、管理データに設定
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void RESM_AddResHdsEx(RES_MANAGER_PTR resm, const RES_HEADER_PTR header, int start, int num, int heap);

//----------------------------------------------------------------------------
/**
 *
 *@brief	リソースの破棄
 *
 *@param	resm	破棄するリソースが登録されている管理データポインタ
 *@param	r_obj	破棄するリソースオブジェ
 *
 * ●読み込んだリソースを破棄し、管理データを初期化
 */
//-----------------------------------------------------------------------------
GLOBAL void RESM_DeleteRes(RES_MANAGER_PTR resm, RES_OBJ_PTR r_obj);

//----------------------------------------------------------------------------
/**
 *
 *@brief	IDでリソースの破棄
 *
 *@param	resm	破棄するリソースが登録されている管理データポインタ
 *@param	id		破棄するリソースのID	(管理ID)
 *
 * ●読み込んだリソースを破棄し、管理データを初期化
 */
//-----------------------------------------------------------------------------
GLOBAL void RESM_DeleteResID(RES_MANAGER_PTR resm, int id);

//----------------------------------------------------------------------------
/**
 *
 *@brief	全リソースの破棄
 *
 *@param	resm	破棄するリソースが登録されている管理データポインタ
 *
 * ●読み込んだリソースを破棄し、管理データを初期化
 */
//-----------------------------------------------------------------------------
GLOBAL void RESM_DeleteAllRes(RES_MANAGER_PTR resm);

//----------------------------------------------------------------------------
/**
 *
 *@brief	リソースオブジェクトデータポインタを取得
 *
 *@param	resm		リソース管理データ
 *@param	id			リソースのID	(管理ID)
 *
 *@retval	NULL		登録されていない
 *@retval	RES_OBJ_PTR	登録されているリソースオブジェポインタ
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL RES_OBJ_PTR RESM_GetResObj(RES_MANAGER_PTR resm, int id);

//----------------------------------------------------------------------------
/**
 *
 *@brief	登録されているリソースデータを取得
 *
 *@param	r_obj		リソースオブジェ
 *
 *@retval	NULL		登録されていない
 *@retval	NULL以外	登録されているリソースポインタ
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void* RESM_GetRes(RES_OBJ_PTR r_obj);

//----------------------------------------------------------------------------
/**
 *
 *@brief	登録されているリソースデータを変更
 *
 *@param	r_obj		リソースオブジェ
 *@param	res			設定するリソース
 *
 *@param	none
 *
 *	今まで保持されていたデータは破棄されます。（メモリ解放）
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void RESM_SetRes(RES_OBJ_PTR r_obj, void* res);

//----------------------------------------------------------------------------
/**
 *
 *@brief	登録されているIDを取得
 *
 *@param	r_obj		リソースオブジェ
 *
 *@retval	int			管理ID
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL int RESM_GetID(RES_OBJ_PTR r_obj);

//----------------------------------------------------------------------------
/**
 *
 *@brief	登録されているIDを設定
 *
 *@param	resm		リソースマネージャ
 *@param	r_obj		リソースオブジェ
 *@param	id			設定するID
 *
 *@retval	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void RESM_SetID(RES_MANAGER_PTR resm, RES_OBJ_PTR r_obj, int id);

//-----------------------------------------------------------------------------
//
//		*********** ヘッダー用関数 **************
//
//=============================================================================
//----------------------------------------------------------------------------
/**
 *
 *	ヘッダーファイル形式の説明
 *	書式
 *		リソースファイルパス,ID(リターン)
 *		リソースファイルパス,ID(リターン)
 *		リソースファイルパス,ID(リターン)
 *		0,0		// 終端コード
 *
 */
//-----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/**
 *
 *@brief	ヘッダーサイズを取得
 *
 *@param	none
 *
 *@return	int		ヘッダーのバイトサイズ
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL int RESM_GetHeaderSize(void);

//----------------------------------------------------------------------------
/**
 *
 *@brief	ヘッダー配列から要素数のデータを返す
 *
 *@param	tbl		配列になっているヘッダー
 *@param	no		要素数
 *
 *@return	RES_HEADER_PTR data[no] のアドレス
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL RES_HEADER_PTR RESM_GetTbl(RES_HEADER_PTR tbl, int no);

//----------------------------------------------------------------------------
/**
 *
 *@brief	リソースヘッダーの読み込み
 *
 *@param	header			ヘッダーデータ格納先
 *@param	rom_path		ヘッダーファイルパス
 *@param	heap			ヒープID
 *
 *@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void RESM_HeaderLoad(RES_HEADER_PTR header, const char* rom_path, int heap);

//----------------------------------------------------------------------------
/**
 *
 *@brief	リソースヘッダーの破棄
 *
 *@param	header			ヘッダーデータデータ
 *
 *@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void RESM_HeaderFree(RES_HEADER_PTR header);











//-----------------------------------------------------------------------------
/**
 *
 *
*	テクスチャリソース限定マネージャ
*	（.nsbtx専用）
*
*	上のリソースマネージャ機能に加え
*		Vram転送　VramKey取得＆管理
*	の機能を追加したマネージャです。
*
* 使い方
*
*	TEXRESM_Init	マネージャを作成
*
*		TEXRESM_AddRes〜	リソースを登録
*
*			// ここはすきなように
*			TEXRESM_GetRes		読み込んだままのリソースを取得
*			TEXRESM_AllocVramKey VramKey確保
*			TEXRESM_TexLoad		テクスチャ読み込み
*			TEXRESM_CutTex		テクスチャ実データ破棄
*			TEXRESM_GetTexKey	テクスチャキー取得
*			TEXRESM_GetPlttKey	パレットキー取得
*			//
*
*		TEXRESM_DeleteRes〜	リソースを破棄
*
*	TEXRESM_Deleteでマネージャ	破棄
*
*
*/
//-----------------------------------------------------------------------------
//---------------------------
//
//	テクスチャリソース管理マネージャー
//	管理データポインタ
//
//===========================
typedef struct _TEXRES_MANAGER* TEXRES_MANAGER_PTR;
typedef const struct _TEXRES_MANAGER* CONST_TEXRES_MANAGER_PTR;

//---------------------------
//
//	テクスチャリソース管理データポインタ
//	読み込んだ１つのリソースデータ
//	VramKey
//	管理しているポインタ
//
//===========================
typedef struct _TEXRES_OBJ* TEXRES_OBJ_PTR;
typedef const struct _TEXRES_OBJ* CONST_TEXRES_OBJ_PTR;

//-------------------------------------
//	テクスチャカット　有無
//=====================================
enum{
	TEXRESM_TEX_CUT_FALSE,
	TEXRESM_TEX_CUT_TRUE,
};


//----------------------------------------------------------------------------
/**
 *
 *@brief	リソース管理マネージャー実態部作成
 *
 *@param	num		データ管理テーブル数
 *
 *@return	TEXRES_MANAGER_PTR		管理データポインタ
 *
 * ●管理テーブル領域の確保
 * ●管理テーブル領域の初期化
 *
 */
//-----------------------------------------------------------------------------
GLOBAL TEXRES_MANAGER_PTR TEXRESM_Init(int num, int heap);

//----------------------------------------------------------------------------
/**
 *
 *@brief	リソース管理データ破棄
 *
 *@param	resm	リソース管理データ
 *
 *@return	none
 *
 *	●読み込んだリソースを破棄
 *	●管理テーブル領域を破棄
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_Delete(TEXRES_MANAGER_PTR resm);

//----------------------------------------------------------------------------
/**
 *
 *@brief	残り登録可能数を取得
 *
 *@param	resm	取得するリソース管理データ
 *
 *@return	int		残り登録可能数
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL int TEXRESM_GetRest(CONST_TEXRES_MANAGER_PTR resm);

//----------------------------------------------------------------------------
/**
 *
 *@brief	IDが重複しないかを取得
 *
 *@param	resm	取得するリソース管理データ
 *@param	id		チェックするID
 *
 *@retval	TRUE	重複しない
 *@retval	FALSE	重複する
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL BOOL TEXRESM_CheckID(CONST_TEXRES_MANAGER_PTR resm, int id);

//-----------------------------------------------------------------------------
/**
*		TEXRESM_AddRes〜関数郡
*
*		登録関数は複数種類ありますので、利用方法によって使い分けてください
*/
//-----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/**
 *
 *@brief	リソースの登録	読み込み済みリソースの登録
 *
 *@param	resm		登録するリソース管理データポインタ
 *@param	res			リソース
 *@param	id			登録ID	（＊重複注意）
 *@param	texcut_flg	テクスチャカット　有無　フラグ
 *@param	heap		テクスチャカットワーク　ヒープ
 *
 *@retval	TEXRES_OBJ_PTR	登録成功
 *@retval	NULL		登録失敗	登録テーブルが満杯
 *
 * ●パスのリソースを読み込んで、管理データに設定
 * ●TEXRESM_Delete〜関数を使用すると勝手に引数のリソースは破棄されます。
 *
 */
//-----------------------------------------------------------------------------
GLOBAL TEXRES_OBJ_PTR TEXRESM_AddResNormal(CONST_TEXRES_MANAGER_PTR resm, void* res, int id, u32 texcut_flg, u32 heap);

//----------------------------------------------------------------------------
/**
 *
 *@brief	リソースの登録とVramKeyの取得を行う
 *
 *@param	resm	登録するリソース管理データポインタ
 *@param	res		リソース
 *@param	id		登録ID	（＊重複注意）
 *@param	texcut_flg	テクスチャカット　有無　フラグ
 *@param	heap	リソース読み込みに使用するヒープ
 *
 *@retval	TEXRES_OBJ_PTR	登録成功
 *@retval	NULL		登録失敗	登録テーブルが満杯
 *
 * ●処理の流れ
 *	１：パスのリソースを読み込む
 *	２：VramKeyを取得
 */
//-----------------------------------------------------------------------------
GLOBAL TEXRES_OBJ_PTR TEXRESM_AddAndAllocVramKeyResNormal(TEXRES_MANAGER_PTR resm, void* res, int id, u32 texcut_flg, int heap);

//----------------------------------------------------------------------------
/**
 *
 *@brief	リソースの破棄
 *
 *@param	resm	破棄するリソースが登録されている管理データポインタ
 *@param	r_obj	破棄するリソースオブジェ
 *
 * ●読み込んだリソースを破棄し、管理データを初期化
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_DeleteRes(TEXRES_MANAGER_PTR resm, TEXRES_OBJ_PTR r_obj);

//----------------------------------------------------------------------------
/**
 *
 *@brief	IDでリソースの破棄
 *
 *@param	resm	破棄するリソースが登録されている管理データポインタ
 *@param	id		破棄するリソースのID	(管理ID)
 *
 * ●読み込んだリソースを破棄し、管理データを初期化
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_DeleteResID(TEXRES_MANAGER_PTR resm, int id);

//----------------------------------------------------------------------------
/**
 *
 *@brief	全リソースの破棄
 *
 *@param	resm	破棄するリソースが登録されている管理データポインタ
 *
 * ●読み込んだリソースを破棄し、管理データを初期化
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_DeleteAllRes(TEXRES_MANAGER_PTR resm);

//----------------------------------------------------------------------------
/**
 *
 *@brief	リソースオブジェクトデータポインタを取得
 *
 *@param	resm		リソース管理データ
 *@param	id			リソースのID	(管理ID)
 *
 *@retval	NULL		登録されていない
 *@retval	TEXRES_OBJ_PTR	登録されているリソースオブジェポインタ
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL TEXRES_OBJ_PTR TEXRESM_GetResObj(CONST_TEXRES_MANAGER_PTR resm, int id);

//----------------------------------------------------------------------------
/**
 *
 *@brief	登録されているIDを取得
 *
 *@param	r_obj		リソースオブジェ
 *
 *@retval	int			管理ID
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL int TEXRESM_GetID(CONST_TEXRES_OBJ_PTR r_obj);

//----------------------------------------------------------------------------
/**
 *
 *@brief	登録されているIDを設定
 *
 *@param	resm		リソースマネージャ
 *@param	r_obj		リソースオブジェ
 *@param	id			設定するID
 *
 *@retval	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_SetID(TEXRES_MANAGER_PTR resm, TEXRES_OBJ_PTR r_obj, int id);

//----------------------------------------------------------------------------
/**
 * オブジェクトポインタで取得
 *
 *@brief	登録されているテクスチャリソースデータを取得
 *
 *@param	r_obj		リソースオブジェ
 *
 *@retval	NULL		登録されていない
 *@retval	NULL以外	登録されているテクスチャリソースポインタ
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL NNSG3dResTex* TEXRESM_GetResPTR(CONST_TEXRES_OBJ_PTR r_obj);

//----------------------------------------------------------------------------
/**
 * IDで取得
 *
 *@brief	登録されているテクスチャリソースデータを取得
 *
 *@param	resm		テクスチャリソースマネージャ
 *@param	id			登録ID
 *
 *@retval	NULL		登録されていない
 *@retval	NULL以外	登録されているテクスチャリソースポインタ
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL NNSG3dResTex* TEXRESM_GetResID(CONST_TEXRES_MANAGER_PTR resm, int id);

//----------------------------------------------------------------------------
/**
 * ●オブジェクトポインタで確保
 *
 *	@brief	テクスチャキーをVramManagerから確保します
 *
 *	@param	r_obj		リソースオブジェ
 *
 *	@return none
 *
 * 確保したVramKey（テクスチャキー　パレットキー）
 * はTEXRESM_DeleteRes〜関数で破棄されます。
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_AllocVramKeyPTR( TEXRES_OBJ_PTR r_obj );

//----------------------------------------------------------------------------
/**
 * ●IDで確保
 *
 *	@brief	テクスチャキーをVramManagerから確保します
 *
 *	@param	resm		テクスチャリソースマネージャ
 *	@param	id			登録ID
 *
 *	@return none
 *
 * 確保したVramKey（テクスチャキー　パレットキー）
 * はTEXRESM_DeleteRes〜関数で破棄されます。
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_AllocVramKeyID( CONST_TEXRES_MANAGER_PTR resm, int id );

//-----------------------------------------------------------------------------
/**
*		テクスチャデータを転送したり、
*		テクスチャ実データを破棄す関数郡
*
*		TEXRESM_TexLoadAndCutTex〜関数は転送と
*							テクスチャ実データ破棄を同時に行います。
*
*		TEXRESM_TexLoad〜関数はテクスチャ転送を行います。
*		TEXRESM_CutTex〜関数はテクスチャ実データの破棄を行います。
*/
//-----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/**
 * ●オブジェクトポインタ
 *
 *	@brief	テクスチャリソースをVramに転送いてテクスチャの実データを破棄
 *
 *	@param	r_obj	テクスチャリソースオブジェ
 *
 *	@return	none
 *
 * この関数を呼ぶとテクスチャ実データは破棄されます。
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_TexLoadAndCutTexPTR( TEXRES_OBJ_PTR r_obj );
//----------------------------------------------------------------------------
/**
 * ●ID
 *
 *	@brief	テクスチャリソースをVramに転送してテクスチャの実データを破棄
 *
 *	@param	resm		テクスチャリソースマネージャ
 *	@param	id			登録ID
 *
 *	@return	none
 *
 * この関数を呼ぶとテクスチャ実データは破棄されます。
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_TexLoadAndCutTexID( TEXRES_MANAGER_PTR resm, int id );
//----------------------------------------------------------------------------
/**
 * ●オブジェクトポインタ
 *
 *	@brief	テクスチャリソースをVramに転送
 *
 *	@param	r_obj	テクスチャリソースオブジェ
 *
 *	@return	none
 *
 *	TEXRESM_TexLoadAndCutTex関数を
 *		・テクスチャデータ転送
 *		・テクスチャ実データ削除
 *	の２つの処理に分けた関数です。
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_TexLoadPTR( TEXRES_OBJ_PTR r_obj );
//----------------------------------------------------------------------------
/**
 * ●ID
 *
 *	@brief	テクスチャリソースをVramに転送
 *
 *	@param	resm		テクスチャリソースマネージャ
 *	@param	id			登録ID
 *
 *	@return	none
 *
 *	TEXRESM_TexLoadAndCutTex関数を
 *		・テクスチャデータ転送
 *		・テクスチャ実データ削除
 *	の２つの処理に分けた関数です。
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_TexLoadID( TEXRES_MANAGER_PTR resm, int id );
//----------------------------------------------------------------------------
/**
 * ●オブジェクトポインタ
 *
 *	@brief	テクスチャリソースの実データを破棄
 *
 *	@param	r_obj	テクスチャリソースオブジェ
 *
 *	@return	none
 *
 *	TEXRESM_TexLoadAndCutTex関数を
 *		・テクスチャデータ転送
 *		・テクスチャ実データ削除
 *	の２つの処理に分けた関数です。
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_CutTexPTR( TEXRES_OBJ_PTR r_obj );
//----------------------------------------------------------------------------
/**
 * ●ID
 *
 *	@brief	テクスチャリソースの実データを破棄
 *
 *	@param	resm		テクスチャリソースマネージャ
 *	@param	id			登録ID
 *
 *	@return	none
 *
 *	TEXRESM_TexLoadAndCutTex関数を
 *		・テクスチャデータ転送
 *		・テクスチャ実データ削除
 *	の２つの処理に分けた関数です。
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_CutTexID( TEXRES_MANAGER_PTR resm, int id );

//----------------------------------------------------------------------------
/**
 * オブジェクトポインタで取得
 *
 *	@brief	テクスチャキーの取得
 *
 *	@param	r_obj	テクスチャリソースオブジェ
 *
 *	@return	テクスチャキー
 *
 *	NNSGfdTexKeyの中が
 *		NNS_GFD_ALLOC_ERROR_TEXKEY	VramKey取得してない
 *		その他						VramKey取得してる
 *
 */
//-----------------------------------------------------------------------------
GLOBAL NNSGfdTexKey TEXRESM_GetTexKeyPTR( CONST_TEXRES_OBJ_PTR r_obj );

//----------------------------------------------------------------------------
/**
 * IDで取得
 *
 *	@brief	テクスチャキーの取得
 *
 *	@param	resm		テクスチャリソースマネージャ
 *	@param	id			登録ID
 *
 *	@return	テクスチャキー
 *
 *	NNSGfdTexKeyの中が
 *		NNS_GFD_ALLOC_ERROR_TEXKEY	VramKey取得してない
 *		その他						VramKey取得してる
 *
 */
//-----------------------------------------------------------------------------
GLOBAL NNSGfdTexKey TEXRESM_GetTexKeyID( CONST_TEXRES_MANAGER_PTR resm, int id );

//----------------------------------------------------------------------------
/**
 * オブジェクトポインタで取得
 *
 *	@brief	テクスチャ4x4キーの取得
 *
 *	@param	r_obj	テクスチャリソースオブジェ
 *
 *	@return	テクスチャキー
 *
 *	NNSGfdTexKeyの中が
 *		NNS_GFD_ALLOC_ERROR_TEXKEY	VramKey取得してない
 *		その他						VramKey取得してる
 *
 */
//-----------------------------------------------------------------------------
GLOBAL NNSGfdTexKey TEXRESM_GetTex4x4KeyPTR( CONST_TEXRES_OBJ_PTR r_obj );

//----------------------------------------------------------------------------
/**
 * IDで取得
 *
 *	@brief	テクスチャ4x4キーの取得
 *
 *	@param	resm		テクスチャリソースマネージャ
 *	@param	id			登録ID
 *
 *	@return	テクスチャキー
 *
 *	NNSGfdTexKeyの中が
 *		NNS_GFD_ALLOC_ERROR_TEXKEY	VramKey取得してない
 *		その他						VramKey取得してる
 *
 */
//-----------------------------------------------------------------------------
GLOBAL NNSGfdTexKey TEXRESM_GetTex4x4KeyID( CONST_TEXRES_MANAGER_PTR resm, int id );

//----------------------------------------------------------------------------
/**
 * オブジェクトポインタで取得
 *
 *	@brief	パレットキーの取得
 *
 *	@param	r_obj	テクスチャリソースオブジェ
 *
 *	@return	パレットキー
 *
 *	NNSGfdPlttKeyの中が
 *		NNS_GFD_ALLOC_ERROR_PLTTKEY	VramKey取得してない
 *		その他						VramKey取得してる
 *
 */
//-----------------------------------------------------------------------------
GLOBAL NNSGfdPlttKey TEXRESM_GetPlttKeyPTR( CONST_TEXRES_OBJ_PTR r_obj );

//----------------------------------------------------------------------------
/**
 * IDで取得
 *
 *	@brief	パレットキーの取得
 *
 *	@param	resm		テクスチャリソースマネージャ
 *	@param	id			登録ID
 *
 *	@return	パレットキー
 *
 *	NNSGfdPlttKeyの中が
 *		NNS_GFD_ALLOC_ERROR_PLTTKEY	VramKey取得してない
 *		その他						VramKey取得してる
 *
 */
//-----------------------------------------------------------------------------
GLOBAL NNSGfdPlttKey TEXRESM_GetPlttKeyID( CONST_TEXRES_MANAGER_PTR resm, int id );

//-----------------------------------------------------------------------------
/**
*		指定されたVramKeyに転送する関数です。
*
*		TEXRESM_CutTex〜関数で実データを破棄したデータは
*									転送することができません。
*/
//-----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/**
 * ●オブジェクトポインタ
 *
 *	@brief	指定されたVramKey位置にテクスチャを転送します。
 *
 *	@param	r_obj		テクスチャリソースオブジェ
 *	@param	texkey		テクスチャキー
 *	@param	tex4x4key	テクスチャ4x4キー
 *	@param	plttkey		パレットキー
 *
 *	@return	none
 *
 * 引数のtexkey・plttkeyデータはテクスチャリソースマネージャでは
 * 管理しませんので、各自確保、破棄してください。
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_TexLoadOfKeyPTR( TEXRES_OBJ_PTR r_obj, NNSGfdTexKey texkey, NNSGfdTexKey tex4x4key, NNSGfdPlttKey plttkey );

//----------------------------------------------------------------------------
/**
 *	●ID
 *
 *	@brief	指定されたVramKey位置にテクスチャを転送します。
 *
 *	@param	resm		テクスチャリソースマネージャ
 *	@param	id			登録ID
 *	@param	texkey		テクスチャキー
 *	@param	tex4x4key	テクスチャ4x4キー
 *	@param	plttkey		パレットキー
 *
 *	@return	none
 *
 * 引数のtexkey・plttkeyデータはテクスチャリソースマネージャでは
 * 管理しませんので、各自確保、破棄してください。
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void TEXRESM_TexLoadOfKeyID( TEXRES_MANAGER_PTR resm, int id, NNSGfdTexKey texkey, NNSGfdTexKey tex4x4key, NNSGfdPlttKey plttkey );




//-----------------------------------------------------------------------------
/**
 *			ツール関数
 */
//-----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/**
 *	@brief	モデルリソースからテクスチャ実データを抜いたサイズを取得する
 *
 *	@param	p_file	モデルのファイル
 *
 *	@return	テクスチャデータを破棄したサイズ
 */
//-----------------------------------------------------------------------------
GLOBAL u32 TEXRESM_TOOL_CutTexDataSizeGet( NNSG3dResFileHeader* p_file );



#undef	GLOBAL
#endif		// __RES_MANAGER_H__
